package com.customization.unionpay.market.util;

import com.alibaba.fastjson.JSONObject;
import net.sf.json.JSONArray;
import org.apache.http.client.config.RequestConfig;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.integration.logging.Logger;
import weaver.integration.logging.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * @author sjm
 * @description 会计引擎相关
 */
public class AccountingEngineUtils {

    private static final Logger log = LoggerFactory.getLogger(AccountingEngineUtils.class);

    public static JSONObject doExecuteAccountingEngine(String bdh) {
        JSONObject resObjGet = null;
        String url = com.customization.unionpay.market.util.PropUtils.BB_LOG.getPropValue("marketSubject", "rangCaoUrl");
        log.info("url："+url);
        //抛送浪潮
        String openBusinessUrl = url+bdh;
        log.info("openBusinessUrl："+openBusinessUrl);
        try {
            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
            resObjGet = com.customization.unionpay.market.util.HttpUtils.doGet(requestConfig, openBusinessUrl, null, null, null);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        return resObjGet;
    }


    public static JSONObject pushAccountingEngine(String id,String modeName, User user) throws Exception {
        try {
            String url = com.customization.unionpay.market.util.PropUtils.BB_LOG.getPropValue("marketSubject", "receiveDataUrl");
            log.info("url："+url);
            String businessTypeId = com.customization.unionpay.market.util.PropUtils.BB_LOG.getPropValue("marketSubject", "businessTypeId");
            log.info("businessTypeId："+businessTypeId);

            String openBusinessUrl = com.customization.unionpay.market.util.PropUtils.BB_LOG.getPropValue("marketSubject", "openBusinessUrl");
            String rangCaoUrl = PropUtils.BB_LOG.getPropValue("marketSubject", "rangCaoUrl");

            url = url+businessTypeId;
            log.info("抛送会计引擎接口地址配url：" + url);
            // 获取参数
            Map<String ,String> map = getSendParams(id, "dt1",modeName);
            String sendParams = map.get("params");
            log.info("请求参数sendParams："+sendParams);
            // 批次号
            String bdh = map.get("bdh");
            JSONObject resObj = null;
            try {
                Map<String, Object> headers = new HashMap<>();
                headers.put("Content-Type", "application/json;charset=UTF-8");
                resObj = com.customization.unionpay.market.util.HttpUtils.doPost(null, url, headers, sendParams, null, null);
                log.info("推送会计引擎返回结果:" + resObj);
                if (resObj.containsKey("statusCode") && "200".equals(resObj.getString("statusCode"))) {
                    JSONObject responseBody = resObj.getJSONObject("responseBody");
                    log.info("responseBody:" + responseBody);
                    String code = responseBody.getString("code");
                    if("200".equals(code)){
                        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
                        try {
                            RecordSet recordSet = new RecordSet();
                            String userName=changeField(String.valueOf(user.getUID()),"hrmresource", "id", "workcode", recordSet);;
                            if(userName.equals("")){
                                userName="admin";
                            }
                            openBusinessUrl = openBusinessUrl.replace("{{userName}}",userName)+bdh;
                            log.info("openBusinessUrl:" + openBusinessUrl);
                            JSONObject openBusiness = com.customization.unionpay.market.util.HttpUtils.doGet(requestConfig, openBusinessUrl, null, null, null);
                            log.info("抛送浪潮结果:" + openBusiness);
                            try {
                                // 查询浪潮异常
                                String rcUrl = rangCaoUrl + bdh;
                                log.info("rcUrl:" + rcUrl);
                                JSONObject resObjGet = HttpUtils.doGet(requestConfig, rcUrl, null, null, null);
                                log.info("查询浪潮返回结果:" + resObjGet);
                                return resObjGet;
                            } catch (Exception e) {
                                log.error("查询浪潮异常:" + e.getMessage());
                                throw new Exception("查询浪潮异常:" + e.getMessage());
                            }
                        } catch (Exception e) {
                            log.error("推送浪潮异常:" + e.getMessage());
                            throw new Exception("推送浪潮异常:" + e.getMessage());
                        }
                    }else {
                        String err = responseBody.getString("msg");
                        log.error("推送会计引擎错误:"+code + "==>" + err);
                        throw new Exception("推送会计引擎错误:"+code + "==>" + err);
                    }
                } else {
                    String statusCode = resObj.getString("statusCode");
                    String err = resObj.getString("err");
                    log.error("推送会计引擎错误:"+statusCode + "==>" + err);
                    throw new Exception("推送会计引擎错误:"+statusCode + "==>" + err);
                }
            } catch (Exception e) {
                log.error("推送会计引擎异常:" + e.getMessage());
                throw new Exception("推送会计引擎异常:" + e.getMessage());
            }
        } catch (Exception e) {
            log.error("其他异常:" + e.getMessage());
            throw new Exception("其他异常:" + e.getMessage());
        }
    }

    /**
     * 获取接口请求参数
     * @param id
     * @param mx
     * @return
     */
    private static Map<String, String> getSendParams(String id, String mx,String pid) {
        Map<String, String> map = new HashMap<>();
        RecordSet rs = new RecordSet();
        RecordSet rs2 = new RecordSet();

        //获取流程主表数据
        HashMap<String, String> mainData = new HashMap<>();
        mainData.put("mx", mx);
        String mainid = "0";
        String sql = "select * from uf_ywtokjyqzjb where  id= ? ";
        boolean b = rs.executeQuery(sql,id);
        if (b && rs.next()) {
            mainid = rs.getString("id");

            //来源id lylc 主表
            String lylc = Util.null2String(rs.getString("lylc"));
            mainData.put("lylc", lylc);
            //来源业务表名 lyywbm 主表
            String lyywbm = Util.null2String(rs.getString("lyywbm"));
            mainData.put("lyywbm", lyywbm);

            //模板类型
            mainData.put("pid", pid);
            //核算主体 hszt 主表
            String hszt = Util.null2String(rs.getString("hszt"));
            mainData.put("hszt", hszt);
            //入账日期 rzrq 主表
            String rzrq = Util.null2String(rs.getString("rzrq"));
            mainData.put("rzrq", rzrq);
            //入账日期（付款） rzrqfk 主表
            String rzrqfk = Util.null2String(rs.getString("rzrqfk"));
            mainData.put("rzrqfk", rzrqfk);
            //表单号 bdh 主表
            String bdh = Util.null2String(rs.getString("bdh"));
            mainData.put("bdh", bdh);
            map.put("bdh", bdh);
            //银行交易成功日期 yhjycgrq 主表
            String yhjycgrq = Util.null2String(rs.getString("yhjycgrq"));
            mainData.put("yhjycgrq", yhjycgrq);
            //币种 zbbz 主表
            String zbbz = Util.null2String(rs.getString("zbbz"));
            mainData.put("zbbz", zbbz);
            //汇率 zbhl 主表
            String zbhl = Util.null2String(rs.getString("zbhl"));
            mainData.put("zbhl", zbhl);

            //凭证制单人
            String zhidanren=Util.null2String(rs.getString("pzzdr"));
            zhidanren = changeField(zhidanren,"hrmresource", "id", "outkey", rs2);
            mainData.put("pzzdr", zhidanren);
            String fuheren = Util.null2String(rs.getString("pzfhr"));
            fuheren = changeField(fuheren, "hrmresource", "id", "outkey", rs2);
            mainData.put("pzfhr", fuheren);


            //填单人	jbr	经办人（不传浪潮，返回到表单凭证明细）	报账人	jbr
            String jbr = Util.null2String(rs.getString("jbr"));
            jbr = changeField(jbr,"hrmresource", "id", "outkey", rs2);
            mainData.put("jbr", jbr);
            //填单人部门	jbrbm	经办人部门（不传浪潮，返回到表单凭证明细）	报账部门	jbrbm
            String jbrbm = Util.null2String(rs.getString("jbrbm"));
            jbrbm = changeField(jbrbm,"hrmdepartment", "id", "outkey", rs2);
            mainData.put("jbrbm", jbrbm);
            //所属公司	jbrgs	经办人公司（不传浪潮，返回到表单凭证明细）	所属公司编码	jbrgs
            String jbrgs = Util.null2String(rs.getString("jbrgs"));
            jbrgs = changeField(jbrgs,"hrmsubcompany", "id", "outkey", rs2);
            mainData.put("jbrgs", jbrgs);

            //头摘要 tzy 主表
            String tzy = Util.null2String(rs.getString("tzy"));
            mainData.put("tzy", tzy);
            //客商 ks 主表
            String ks = Util.null2String(rs.getString("ks"));
            mainData.put("ks", ks);
            //合同 ht 主表
            String ht = Util.null2String(rs.getString("ht"));
            mainData.put("ht", ht);
            //项目 xm 主表
            String xm = Util.null2String(rs.getString("xm"));
            mainData.put("xm", xm);
            //出资方式 czfs 主表
            String czfs = Util.null2String(rs.getString("czfs"));
            mainData.put("czfs", czfs);
            //活动类型 hdlx 主表
            String hdlx = Util.null2String(rs.getString("hdlx"));
            mainData.put("hdlx", hdlx);
            //核算业务分类 hsywfl 主表
            String hsywfl = Util.null2String(rs.getString("hsywfl"));
            mainData.put("hsywfl", hsywfl);
            //科技项目 kjxm 主表
            String kjxm = Util.null2String(rs.getString("kjxm"));
            mainData.put("kjxm", kjxm);
            //在建工程编码 zjgcbm 主表
            String zjgcbm = Util.null2String(rs.getString("zjgcbm"));
            mainData.put("zjgcbm", zjgcbm);
            //收款类型 sklx 主表
            String sklx = Util.null2String(rs.getString("sklx"));
            mainData.put("sklx", sklx);
            //经济事项 jjsx 主表
            String jjsx = Util.null2String(rs.getString("jjsx"));
            jjsx=getTreeId(jjsx);
            mainData.put("jjsx", jjsx);
            //银行账号（转入） yhzhzr 主表
            String yhzhzr = Util.null2String(rs.getString("yhzhzr"));
            mainData.put("yhzhzr", yhzhzr);
            //银行账号（付款） yhzhfk 主表
            String yhzhfk = Util.null2String(rs.getString("yhzhfk"));
            mainData.put("yhzhfk", yhzhfk);
            //转入分支行 zrfzh 主表
            String zrfzh = Util.null2String(rs.getString("zrfzh"));
            mainData.put("zrfzh", zrfzh);
            //银行名称 yhmc 主表
            String yhmc = Util.null2String(rs.getString("yhmc"));
            mainData.put("yhmc", yhmc);
            //银行类别 yhlb 主表
            String yhlb = Util.null2String(rs.getString("yhlb"));
            mainData.put("yhlb", yhlb);
            //核销凭证号 hxpzh 主表
            String hxpzh = Util.null2String(rs.getString("hxpzh"));
            mainData.put("hxpzh", hxpzh);
            //划拨类型 hblx 主表
            String hblx = Util.null2String(rs.getString("hblx"));
            mainData.put("hblx", hblx);
            //日报流水类型 rblslx 主表
            String rblslx = Util.null2String(rs.getString("rblslx"));
            mainData.put("rblslx", rblslx);
            //金额11 je11 主表
            String je11 = Util.null2String(rs.getString("je11"));
            mainData.put("je11", je11);
            //金额12 je12 主表
            String je12 = Util.null2String(rs.getString("je12"));
            mainData.put("je12", je12);
            //金额13 je13 主表
            String je13 = Util.null2String(rs.getString("je13"));
            mainData.put("je13", je13);
            //金额14 je14 主表
            String je14 = Util.null2String(rs.getString("je14"));
            mainData.put("je14", je14);
            //金额15 je15 主表
            String je15 = Util.null2String(rs.getString("je15"));
            mainData.put("je15", je15);
            //金额16 je16 主表
            String je16 = Util.null2String(rs.getString("je16"));
            mainData.put("je16", je16);
            //金额17 je17 主表
            String je17 = Util.null2String(rs.getString("je17"));
            mainData.put("je17", je17);
            //金额18 je18 主表
            String je18 = Util.null2String(rs.getString("je18"));
            mainData.put("je18", je18);
            //金额19 je19 主表
            String je19 = Util.null2String(rs.getString("je19"));
            mainData.put("je19", je19);
            //金额20 je20 主表
            String je20 = Util.null2String(rs.getString("je20"));
            mainData.put("je20", je20);
            //出访事由 cfsy 主表
            String cfsy = Util.null2String(rs.getString("cfsy"));
            mainData.put("cfsy", cfsy);
            //字段1 zd1 主表
            String zd1 = Util.null2String(rs.getString("zd1"));
            mainData.put("zd1", zd1);
            //字段2 zd2 主表
            String zd2 = Util.null2String(rs.getString("zd2"));
            mainData.put("zd2", zd2);
            //字段3 zd3 主表
            String zd3 = Util.null2String(rs.getString("zd3"));
            mainData.put("zd3", zd3);
            //字段4 zd4 主表
            String zd4 = Util.null2String(rs.getString("zd4"));
            mainData.put("zd4", zd4);
            //字段5 zd5 主表
            String zd5 = Util.null2String(rs.getString("zd5"));
            mainData.put("zd5", zd5);
        }

        //接口入参
        JSONArray params = new JSONArray();
        sql = "select * from uf_ywtokjyqzjb_dt3 where mainid = ?";
        boolean b3 = rs.executeQuery(sql, mainid);
        while (b3 && rs.next()) {
            Map<String, String> dt1data = new HashMap<>();
            dt1data.putAll(mainData);
            //明细id mxid 明细表
            String mxid = Util.null2String(rs.getString("mxid"));
            dt1data.put("mxid", mxid);
            //币种1 bz1 明细表
            String bz1 = Util.null2String(rs.getString("bz1"));
            dt1data.put("bz1", bz1);
            //汇率1 hl1 明细表
            String hl1 = Util.null2String(rs.getString("hl1"));
            dt1data.put("hl1", hl1);
            //会计科目1 hjkm1 明细表
            String hjkm1 = Util.null2String(rs.getString("hjkm1"));
            hjkm1=getTreeId(hjkm1);
            dt1data.put("hjkm1", hjkm1);
            //借贷方向 jdfx 明细表
            String jdfx = Util.null2String(rs.getString("jdfx"));
            dt1data.put("jdfx", jdfx);
            //行摘要 hzy 明细表
            String hzy = Util.null2String(rs.getString("hzy"));
            dt1data.put("hzy", hzy);
            //核销凭证号1 hxpzh1 明细表
            String hxpzh1 = Util.null2String(rs.getString("hxpzh1"));
            dt1data.put("hxpzh1", hxpzh1);
            //部门 bm 明细表
            String bm = Util.null2String(rs.getString("bm"));
            dt1data.put("bm", bm);
            //客商1 ks1 明细表
            String ks1 = Util.null2String(rs.getString("ks1"));
            dt1data.put("ks1", ks1);
            //合同1 ht1 明细表
            String ht1 = Util.null2String(rs.getString("ht1"));
            dt1data.put("ht1", ht1);
            //个人 gr 明细表
            String gr = Util.null2String(rs.getString("gr"));
            dt1data.put("gr", gr);
            //核算业务分类1 hsywfl1 明细表
            String hsywfl1 = Util.null2String(rs.getString("hsywfl1"));
            dt1data.put("hsywfl1", hsywfl1);
            //银行账号1 yhzh1 明细表
            String yhzh1 = Util.null2String(rs.getString("yhzh1"));
            dt1data.put("yhzh1", yhzh1);
            //收款账号 skzh 明细表
            String skzh = Util.null2String(rs.getString("skzh"));
            dt1data.put("skzh", skzh);
            //付款账号 fkzh 明细表
            String fkzh = Util.null2String(rs.getString("fkzh"));
            dt1data.put("fkzh", fkzh);
            //银行类别1 yhlb1 明细表
            String yhlb1 = Util.null2String(rs.getString("yhlb1"));
            dt1data.put("yhlb1", yhlb1);
            //活动类型1 hdlx1 明细表
            String hdlx1 = Util.null2String(rs.getString("hdlx1"));
            dt1data.put("hdlx1", hdlx1);
            //项目1 xm1 明细表
            String xm1 = Util.null2String(rs.getString("xm1"));
            dt1data.put("xm1", xm1);
            //在建工程编码1 zjgcbm1 明细表
            String zjgcbm1 = Util.null2String(rs.getString("zjgcbm1"));
            dt1data.put("zjgcbm1", zjgcbm1);
            //出资方式1 czfs1 明细表
            String czfs1 = Util.null2String(rs.getString("czfs1"));
            dt1data.put("czfs1", czfs1);
            //投资对象1 tzdx1 明细表
            String tzdx1 = Util.null2String(rs.getString("tzdx1"));
            dt1data.put("tzdx1", tzdx1);
            //品种1 pz1 明细表
            String pz1 = Util.null2String(rs.getString("pz1"));
            dt1data.put("pz1", pz1);
            //股东类型1 gdlx1 明细表
            String gdlx1 = Util.null2String(rs.getString("gdlx1"));
            dt1data.put("gdlx1", gdlx1);
            //员工类型1 yglx1 明细表
            String yglx1 = Util.null2String(rs.getString("yglx1"));
            dt1data.put("yglx1", yglx1);
            //内部往来公司段1 nbwlgsd1 明细表
            String nbwlgsd1 = Util.null2String(rs.getString("nbwlgsd1"));
            dt1data.put("nbwlgsd1", nbwlgsd1);
            //科技项目1 kjxm1 明细表
            String kjxm1 = Util.null2String(rs.getString("kjxm1"));
            dt1data.put("kjxm1", kjxm1);
            //收款单号 skdh 明细表
            String skdh = Util.null2String(rs.getString("skdh"));
            dt1data.put("skdh", skdh);
            //付款单号 fkdh 明细表
            String fkdh = Util.null2String(rs.getString("fkdh"));
            dt1data.put("fkdh", fkdh);
            //付款日期 fkrq 明细表
            String fkrq = Util.null2String(rs.getString("fkrq"));
            dt1data.put("fkrq", fkrq);
            //经济事项1 jjsx1 明细表
            String jjsx1 = Util.null2String(rs.getString("jjsx1"));
            jjsx1=getTreeId(jjsx1);
            dt1data.put("jjsx1", jjsx1);
            //部门属性 bmzx 明细表
            String bmzx = Util.null2String(rs.getString("bmzx"));
            dt1data.put("bmzx", bmzx);
            //发票类型 fplx 明细表
            String fplx = Util.null2String(rs.getString("fplx"));
            dt1data.put("fplx", fplx);
            //付款状态 fkzt 明细表
            String fkzt = Util.null2String(rs.getString("fkzt"));
            dt1data.put("fkzt", fkzt);
            //核算主体1 hszt1 明细表
            String hszt1 = Util.null2String(rs.getString("hszt1"));
            dt1data.put("hszt1", hszt1);
            //收款方核算主体 skfhszt 明细表
            String skfhszt = Util.null2String(rs.getString("skfhszt"));
            dt1data.put("skfhszt", skfhszt);
            //付款方核算主体 fkfhszt 明细表
            String fkfhszt = Util.null2String(rs.getString("fkfhszt"));
            dt1data.put("fkfhszt", fkfhszt);

            //入账日期1 rzrq1 明细表
            String rzrq1 = Util.null2String(rs.getString("rzrq1"));
            dt1data.put("rzrq1", rzrq1);
            //付款单位 fkdw 明细表
            String fkdw = Util.null2String(rs.getString("fkdw"));
            dt1data.put("fkdw", fkdw);
            //收款单位 skdw 明细表
            String skdw = Util.null2String(rs.getString("skdw"));
            dt1data.put("skdw", skdw);
            //经办人1 jbr1 明细表
            String jbr1 = Util.null2String(rs.getString("jbr1"));
            dt1data.put("jbr1", jbr1);
            //经办人部门2 jbrbm2 明细表
            String jbrbm2 = Util.null2String(rs.getString("jbrbm2"));
            dt1data.put("jbrbm2", jbrbm2);
            //经办人公司3 jbrgs3 明细表
            String jbrgs3 = Util.null2String(rs.getString("jbrgs3"));
            dt1data.put("jbrgs3", jbrgs3);
            //所属行业 szhy 明细表
            String szhy = Util.null2String(rs.getString("szhy"));
            dt1data.put("szhy", szhy);
            //原发票认证状态 yfprzzt 明细表
            String yfprzzt = Util.null2String(rs.getString("yfprzzt"));
            dt1data.put("yfprzzt", yfprzzt);
            //换开发票类型 hkfplx 明细表
            String hkfplx = Util.null2String(rs.getString("hkfplx"));
            dt1data.put("hkfplx", hkfplx);
            //原发票类型 yfplx 明细表
            String yfplx = Util.null2String(rs.getString("yfplx"));
            dt1data.put("yfplx", yfplx);
            //新发票类型 xfplx 明细表
            String xfplx = Util.null2String(rs.getString("xfplx"));
            dt1data.put("xfplx", xfplx);
            //本方科目编码 bfkmbm 明细表
            String bfkmbm = Util.null2String(rs.getString("bfkmbm"));
            dt1data.put("bfkmbm", bfkmbm);
            //对方科目编码 dfkmbm 明细表
            String dfkmbm = Util.null2String(rs.getString("dfkmbm"));
            dt1data.put("dfkmbm", dfkmbm);
            //本方子目编码 bfzmbm 明细表
            String bfzmbm = Util.null2String(rs.getString("bfzmbm"));
            dt1data.put("bfzmbm", bfzmbm);
            //对方子目编码 dfzmbm 明细表
            String dfzmbm = Util.null2String(rs.getString("dfzmbm"));
            dt1data.put("dfzmbm", dfzmbm);
            //现金流编码 xjlbm 明细表
            String xjlbm = Util.null2String(rs.getString("xjlbm"));
            dt1data.put("xjlbm", xjlbm);
            //金额1 je1 明细表
            String je1 = Util.null2String(rs.getString("je1"));
            dt1data.put("je1", je1);
            //金额2 je2 明细表
            String je2 = Util.null2String(rs.getString("je2"));
            dt1data.put("je2", je2);
            //金额3 je3 明细表
            String je3 = Util.null2String(rs.getString("je3"));
            dt1data.put("je3", je3);
            //金额4 je4 明细表
            String je4 = Util.null2String(rs.getString("je4"));
            dt1data.put("je4", je4);
            //金额5 je5 明细表
            String je5 = Util.null2String(rs.getString("je5"));
            dt1data.put("je5", je5);
            //金额6 je6 明细表
            String je6 = Util.null2String(rs.getString("je6"));
            dt1data.put("je6", je6);
            //金额7 je7 明细表
            String je7 = Util.null2String(rs.getString("je7"));
            dt1data.put("je7", je7);
            //字段6 zd6 明细表
            String zd6 = Util.null2String(rs.getString("zd6"));
            dt1data.put("zd6", zd6);
            //字段7 zd7 明细表
            String zd7 = Util.null2String(rs.getString("zd7"));
            dt1data.put("zd7", zd7);
            //字段8 zd8 明细表
            String zd8 = Util.null2String(rs.getString("zd8"));
            dt1data.put("zd8", zd8);
            //字段9 zd9 明细表
            String zd9 = Util.null2String(rs.getString("zd9"));
            dt1data.put("zd9", zd9);
            //字段10 zd10 明细表
            String zd10 = Util.null2String(rs.getString("zd10"));
            dt1data.put("zd10", zd10);
            //字段11 zd11 明细表
            String zd11 = Util.null2String(rs.getString("zd11"));
            dt1data.put("zd11", zd11);
            //日报流水类型 rblslx 明细表
            String rblslx = Util.null2String(rs.getString("rblslx"));
            dt1data.put("rblslx", rblslx);
            params.add(dt1data);
        }

        sql = "select * from uf_ywtokjyqzjb_dt9 where mainid = ?";
        boolean b9 = rs.executeQuery(sql, mainid);
        while (b9 && rs.next()) {
            Map<String, String> dt1data = new HashMap<>();
            dt1data.putAll(mainData);
//正式员工工资 zsyggz 分摊明细
            String zsyggz = Util.null2String(rs.getString("zsyggz"));
            dt1data.put("zsyggz", zsyggz);
            //正式员工奖金 zsygjj 分摊明细
            String zsygjj = Util.null2String(rs.getString("zsygjj"));
            dt1data.put("zsygjj", zsygjj);
            //正式员工其他工资 zsygqgz 分摊明细
            String zsygqgz = Util.null2String(rs.getString("zsygqgz"));
            dt1data.put("zsygqgz", zsygqgz);
            //正式员工其他奖金 zsygqjj 分摊明细
            String zsygqjj = Util.null2String(rs.getString("zsygqjj"));
            dt1data.put("zsygqjj", zsygqjj);
            //福利费 flf 分摊明细
            String flf = Util.null2String(rs.getString("flf"));
            dt1data.put("flf", flf);
            //补充养老保险 bcylbx 分摊明细
            String bcylbx = Util.null2String(rs.getString("bcylbx"));
            dt1data.put("bcylbx", bcylbx);
            //补充医疗正式工 bcylzsg 分摊明细
            String bcylzsg = Util.null2String(rs.getString("bcylzsg"));
            dt1data.put("bcylzsg", bcylzsg);
            //派遣员工奖金 pqygjj 分摊明细
            String pqygjj = Util.null2String(rs.getString("pqygjj"));
            dt1data.put("pqygjj", pqygjj);
            //派遣员工工资 pqyggz 分摊明细
            String pqyggz = Util.null2String(rs.getString("pqyggz"));
            dt1data.put("pqyggz", pqyggz);
            //其他员工奖金 qygjj 分摊明细
            String qygjj = Util.null2String(rs.getString("qygjj"));
            dt1data.put("qygjj", qygjj);
            //其他员工工资 qyggz 分摊明细
            String qyggz = Util.null2String(rs.getString("qyggz"));
            dt1data.put("qyggz", qyggz);
            //基本养老保险费 jbylbxf 分摊明细
            String jbylbxf = Util.null2String(rs.getString("jbylbxf"));
            dt1data.put("jbylbxf", jbylbxf);
            //基本医疗保险费 jbylbxf1 分摊明细
            String jbylbxf1 = Util.null2String(rs.getString("jbylbxf1"));
            dt1data.put("jbylbxf1", jbylbxf1);
            //失业保险费 sybxf 分摊明细
            String sybxf = Util.null2String(rs.getString("sybxf"));
            dt1data.put("sybxf", sybxf);
            //工伤保险费 gsbxf 分摊明细
            String gsbxf = Util.null2String(rs.getString("gsbxf"));
            dt1data.put("gsbxf", gsbxf);
            //生育保险费 sybxf1 分摊明细
            String sybxf1 = Util.null2String(rs.getString("sybxf1"));
            dt1data.put("sybxf1", sybxf1);
            //其他社会保险费 qshbxf 分摊明细
            String qshbxf = Util.null2String(rs.getString("qshbxf"));
            dt1data.put("qshbxf", qshbxf);
            //住房公积金 zfgjj 分摊明细
            String zfgjj = Util.null2String(rs.getString("zfgjj"));
            dt1data.put("zfgjj", zfgjj);
            //补充住房公积金 bczfgjj 分摊明细
            String bczfgjj = Util.null2String(rs.getString("bczfgjj"));
            dt1data.put("bczfgjj", bczfgjj);
            //工会经费 ghjf 分摊明细
            String ghjf = Util.null2String(rs.getString("ghjf"));
            dt1data.put("ghjf", ghjf);
            //基本养老保险费（派遣） jbylbxfpq 分摊明细
            String jbylbxfpq = Util.null2String(rs.getString("jbylbxfpq"));
            dt1data.put("jbylbxfpq", jbylbxfpq);
            //基本医疗保险费（派遣） jbylbxfpq1 分摊明细
            String jbylbxfpq1 = Util.null2String(rs.getString("jbylbxfpq1"));
            dt1data.put("jbylbxfpq1", jbylbxfpq1);
            //失业保险费（派遣） sybxfpq 分摊明细
            String sybxfpq = Util.null2String(rs.getString("sybxfpq"));
            dt1data.put("sybxfpq", sybxfpq);
            //工伤保险费（派遣） gsbxfpq1 分摊明细
            String gsbxfpq1 = Util.null2String(rs.getString("gsbxfpq1"));
            dt1data.put("gsbxfpq1", gsbxfpq1);
            //生育保险费（派遣） sybxfpq1 分摊明细
            String sybxfpq1 = Util.null2String(rs.getString("sybxfpq1"));
            dt1data.put("sybxfpq1", sybxfpq1);
            //其他社会保险费（派遣） qshbxfpq 分摊明细
            String qshbxfpq = Util.null2String(rs.getString("qshbxfpq"));
            dt1data.put("qshbxfpq", qshbxfpq);
            //住房公积金(派遣） zfgjjpq 分摊明细
            String zfgjjpq = Util.null2String(rs.getString("zfgjjpq"));
            dt1data.put("zfgjjpq", zfgjjpq);

            params.add(dt1data);
        }

        map.put("params", params.toString());
        return map;
    }

    /**
     * 字段转换
     *
     * @param value
     * @param tablename
     * @param oldField
     * @param newField
     * @param rs
     * @return
     */
    private static String changeField(String value, String tablename, String oldField, String newField, RecordSet rs) {
        String sql = "select " + newField + " from " + tablename + " where " + oldField + " = ?";
        boolean b = rs.executeQuery(sql, Util.null2String(value));
        if (b && rs.next()) {
            return Util.null2String(rs.getString(1));
        } else {
            return "";
        }
    }

    /**
     * 资金来源编码
     * @param czfs
     * @return
     */
    private static String czfsbm(String czfs) {
        if ("1000003".equals(czfs)) {
            return "内部出资";
        } else if ("1000004".equals(czfs)) {
            return "外部出资";
        } else if ("1000005".equals(czfs)) {
            return "内外部联合出资";
        } else {
            return "";
        }
    }

    /**
     * 将Map字符串转换为Map
     *
     * @param str Map字符串
     * @return Map
     */
    public static Map<String, String> mapStringToMap(String str) {
        str = str.substring(1, str.length() - 1);
        String[] strs = str.split(",");
        Map<String, String> map = new HashMap<>();
        for (String string : strs) {
            String key = string.split("=")[0];
            String value = string.split("=")[1];
            // 去掉头部空格
            String key1 = key.trim();
            String value1 = value.trim();
            map.put(key1, value1);
        }
        return map;
    }


    private static String getTreeId(String val) {
        try{
            if(val.contains("_")){
                String[] split = val.split("_");
                int length = split.length;
                return split[length-1];
            }else {
                return val;
            }
        }catch (Exception e) {
            return val;
        }
    }

    private static String jdfx(String jdfx){
        if("0".equals(jdfx)){
            return "借";
        }else  if("1".equals(jdfx)){
            return "贷";
        }else{
            return "";
        }
    }

    private static String hdfx(String hdfx){
        if("1000036".equals(hdfx)){
            return "立减";
        }else if("1000037".equals(hdfx)){
            return "积分(普通)";
        }else if("1000038".equals(hdfx)){
            return "奖励金";
        }else if("1000039".equals(hdfx)){
            return "积分(消费送";
        }else{
            return "";
        }
    }

    private static String bmsx(String bmsx){
        if("1000453".equals(bmsx)){
            return "生产";
        }else if("1000454".equals(bmsx)){
            return "营销";
        }else if("1000455".equals(bmsx)){
            return "管理";
        }else if("1000456".equals(bmsx)){
            return "研发";
        }else if("1000457".equals(bmsx)){
            return "公共";
        }else if("1000458".equals(bmsx)){
            return "生产运营";
        }else{
            return "";
        }
    }


}
